Algoritmo de Euclides estendido
En aritmética e programación informática, o algoritmo de Euclides estendido é unha extensión do algoritmo de Euclides que calcula, alén do máximo común divisor (mcd) dos números enteiros a e b, tamén os coeficientes da identidade de Bézout, que son números enteiros x e y tal que
- .
E sendo a e b positivos, un de x ou y é negativo.
O algoritmo de Euclides estendido é particularmente útil cando a e b son coprimos. Con esa condición temos que x é o inverso multiplicativo modular de a módulo b, e y é o inverso multiplicativo modular de b módulo a.
Do mesmo xeito, o algoritmo de Euclides polinómico estendido permite calcular o inverso multiplicativo en extensións de corpos alxébricos e, en particular, en corpos finitos de orde non prima.
Cun algoritmo moi similar podemos calcular o máximo común divisor polinómico e os coeficientes da identidade de Bézout de dous polinomios dunha variable.
Descrición
[editar | editar a fonte]O algoritmo de Euclides estándar son unha sucesión de divisións cuxos cocientes non se utilizan. Só se usan os restos. Para o algoritmo estendido tamén fan falta os sucesivos cocientes.
O algoritmo de Euclides estendido procede de xeito similar, mais engade outras dúas secuencias , sendo os cocientes e os restos como segue:
O cálculo tamén se detén cando e dá
- é o máximo común divisor da entrada e
- Os coeficientes de Bézout son e é dicir
- Os cocientes de a e b polo seu máximo común divisor veñen dados por e
A maiores, se a e b son ambos os dous positivos e , daquela
para onde denota a parte enteira de x, é dicir, o maior enteiro non maior que x.
Isto implica que o par de coeficientes de Bézout proporcionado polo algoritmo de Euclides estendido é o par mínimo de coeficientes de Bézout, xa que é o único par que satisfai ambas as desigualdades anteriores.
A continuación un exemplo pode clarificar.
Exemplo
[editar | editar a fonte]A seguinte táboa mostra como funciona o algoritmo de Euclides estendido coas entradas 240 e 46[1]. O máximo común divisor é a última entrada distinta de cero, 2 na columna "resto". O cálculo detense na fila 6, porque o resto é 0. Os coeficientes de Bézout aparecen nas dúas últimas entradas da penúltima fila. De feito, é doado verificar que -9 240 + 47 46 = 2. Finalmente, as dúas últimas entradas 23 e 120 da última fila son, ata o signo, os cocientes da entrada 46 e 240 polo máximo común divisor 2.
índice i | cociente ci−1 | Resto ri | si | ti |
---|---|---|---|---|
0 | 240 | 1 | 0 | |
1 | 46 | 0 | 1 | |
2 | 240 ÷ 46 = 5 | 240 − 5 × 46 = 10 | 1 − 5 × 0 = 1 | 0 − 5 × 1 = −5 |
3 | 46 ÷ 10 = 4 | 46 − 4 × 10 = 6 | 0 − 4 × 1 = −4 | 1 − 4 × −5 = 21 |
4 | 10 ÷ 6 = 1 | 10 − 1 × 6 = 4 | 1 − 1 × −4 = 5 | −5 − 1 × 21 = −26 |
5 | 6 ÷ 4 = 1 | 6 − 1 × 4 = 2 | −4 − 1 × 5 = −9 | 21 − 1 × −26 = 47 |
6 | 4 ÷ 2 = 2 | 4 − 2 × 2 = 0 | 5 − 2 × −9 = 23 | −26 − 2 × 47 = −120 |
A maiores, os cocientes, en azul, son os coeficientes da fracción continua de 240/46 = [5, 4, 1, 1, 2].
Algoritmo polinómico de Euclides estendido
[editar | editar a fonte]Para polinomios dunha variable con coeficientes nun corpo, todo funciona de xeito similar, división euclidiana, identidade de Bézout e algoritmo de Euclides estendido. A primeira diferenza é que, na división de Euclides e no algoritmo, a desigualdade ten que ser substituída por unha desigualdade nos graos do polinomio Para o demais, todo o que precede neste artigo segue sendo o mesmo, simplemente substituíndo os enteiros por polinomios.
Unha segunda diferenza reside no límite do tamaño dos coeficientes de Bézout proporcionados polo algoritmo, que é máis preciso no caso polinómico, o que leva ao seguinte teorema.
En matemáticas, é común esixir que o máximo común divisor sexa un polinomio mónico. Para conseguir isto, abonda con dividir cada elemento da saída polo coeficiente principal de Isto permite que, se a e b son coprimos, se obtén 1 no lado dereito da desigualdade de Bézout. En caso contrario, pódese obter calquera constante distinta de cero.
Se a e b son dous polinomios distintos de cero, entón o algoritmo de Euclides estendido produce o único par de polinomios (s, t) tal que
O algoritmo de Euclides estendido é a ferramenta esencial para calcular inversos multiplicativos en estruturas modulares, normalmente os enteiros modulares e as extensións de corpos alxébricos. Un exemplo notable deste último caso son os corpos finitos de orde non prima.
Unha terceira diferenza é que, no caso polinómico, o máximo común divisor defínese só ata a multiplicación por unha constante distinta de cero. Hai varias formas de definir sen ambigüidades un máximo común divisor.
Cálculo de inversos multiplicativos en aritmética modular
[editar | editar a fonte]Números enteiros modulares
[editar | editar a fonte]Un elemento a do anel Z/nZ ten un inverso multiplicativo (é dicir, é unha unidade) se é coprimo con n. En particular, se n é primo, a ten un inverso multiplicativo se non é cero (módulo n). Así, Z/nZ é un corpo se e só se n é primo.
A identidade de Bézout afirma que a e n son primos primos se e só se existen números enteiros s e t tal que
Reducindo esta identidade módulo n dáse
Así t, ou, máis exactamente, o resto da división de t por n, é o inverso multiplicativo de a módulo n.
Extensións simples de corpos alxébricos
[editar | editar a fonte]Exemplo
[editar | editar a fonte]Por exemplo, se o polinomio usado para definir o corpo finito GF(28) é p = x8 + x4 + x3 + x + 1, e a = x6 + x4 + x + 1 é o elemento cuxo inverso se desexa, entón a realización do algoritmo dá como resultado o cálculo descrito na seguinte táboa embaixo. Lembremos que en corpos de orde 2n, un ten − z = z e z + z = 0 para cada elemento z do corpo). Temos que 1 é o único elemento distinto de cero en GF(2).
paso | cociente | r | s | t |
---|---|---|---|---|
p = x8 + x4 + x3 + x + 1 | 1 | 0 | ||
a = x6 + x4 + x + 1 | 0 | 1 | ||
1 | x2 + 1 | x2 = p − a (x2 + 1) | 1 | x2 + 1 = 0 − 1 · (x2 + 1) |
2 | x4 + x2 | x + 1 = a − x2 (x4 + x2) | x4+x2 = 0 − 1(x4+x2) | x6 + x2 + 1 = 1 − (x4 + x2) (x2 + 1) |
3 | x + 1 | 1 = x2 − (x + 1) (x + 1) | x5+x4+x3+x2+1 = 1 − (x +1)(x4 + x2) | x7 + x6 + x3 + x = (x2 + 1) − (x + 1) (x6 + x2 + 1) |
4 | x + 1 | 0 = (x + 1) − 1 × (x + 1) | x6 + x4 + x + 1 = (x4+x2) − (x+1)(x5+x4+x3+x2+1) |
Así, o inverso é x7 + x6 + x3 + x, como se pode confirmar multiplicando os dous elementos xuntos e tomando o resto por p do resultado.
O caso de máis de dous números
[editar | editar a fonte]Pódese manexar o caso de máis de dous números de forma iterativa.
Notas
[editar | editar a fonte]Véxase tamén
[editar | editar a fonte]Bibliografía
[editar | editar a fonte]- Knuth, Donald. The Art of Computer Programming. Addison-Wesley. Volume 2, Chapter 4.
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Pages 859–861 of section 31.2: Greatest common divisor.